package com.hzw.saas.api.sys.service;

import java.util.Collection;
import java.util.List;

import com.hzw.saas.api.sys.dto.SysUserAccountDto;
import com.hzw.saas.api.sys.dto.SysUserInfoBO;

/**
 * <p>
 *
 * </p>
 *
 * @author sonam
 * @since 2021/2/24 13:52
 */
public interface ISysUserService {

    /**
     * 根据用户id判断用户是否存在
     *
     * @param userId
     * @return
     */
    boolean exists(String userId);

    /**
     * 根据用户名或手机号或邮箱判断用户是否存在
     *
     * @param query 查询条件
     * @return 是否存在 true/false
     */
    boolean exists(SysUserAccountDto query);

    /**
     * 根据用户id获取用户
     *
     * @param userId 用户ID
     * @return 用户账户
     */
    SysUserAccountDto get(String userId);

    /**
     * 根据用户名或手机号或邮箱查找用户
     *
     * @param query 查询条件
     * @return 用户账户信息
     */
    SysUserAccountDto get(SysUserAccountDto query);

    List<SysUserInfoBO> listSysUsers(Collection<String> userIds);

    List<SysUserInfoBO> listSysUsersByEmail(Collection<String> email);

    /**
     * 新增用户
     *
     * @param SysUserAccountDto 用户信息
     * @return 新增用户信息，包含生成的userId
     */
    SysUserAccountDto add(SysUserAccountDto SysUserAccountDto);

    /**
     * 新增用户
     *
     * @param sysUserAccountDto 用户信息
     * @return 新增用户信息，包含生成的userId
     */
    SysUserAccountDto add(SysUserAccountDto sysUserAccountDto, List<String> roleIds);

    /**
     * 根据用户ID更新用户信息
     *
     * @param SysUserAccountDto 用户信息
     */
    boolean update(SysUserAccountDto SysUserAccountDto);

    /**
     * 根据用户ID更新用户信息
     *
     * @param SysUserAccountDto 用户信息
     */
    boolean update(SysUserAccountDto SysUserAccountDto, List<String> roleIds);

    /**
     * 重置密码
     *
     * @param userId   用户ID
     * @param password 新密码
     * @return 重置结果, true 成功 false 无用户
     */
    boolean resetPassword(String userId, String password);

    /**
     * 删除用户
     *
     * @param userId
     * @return
     */
    boolean delete(String userId);

}
